#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
template<class T>
class Array
{
protected:
	T *alist;//数组指针
	int size;//数组大小                                  
	int length;//数据个数
public:
	Array(T qq[],int sz)                                       //构造函数
	{
		length=sz;                                       //length接收数据个数
		size=10;                                        //默认数组大小为10
		alist = new T[size];                            //为数组开辟空间
		T *ww=qq;
		for(int i=0;i<length;i++)
		{
			alist[i]=ww[i];
		}
		if(alist == NULL)										//如果分配资源不成功
			return; 
 
	}
	int AddItem(T aData);
	bool RemoveAt(int index);
	void InsertItem( int index, T aData);
	void SelectSort();
	void print();
};
template<class T>//添加元素
int Array<T>::AddItem(T aData)//aData为添加的元素,添加至尾部
{
	
    if(length<size)
	{
		alist[length]=aData;
		length++;
	}
	else
	{
		T *np;
		int i;
		np=new T[size+10];   //为np开辟一个20大小的空间
		for(i=0;i<length;i++)
		{
			np[i]=alist[i];     //np先存放alist中的数据
		}
		np[length]=aData;        //添加数据
		length++;
		delete alist;            
		alist=new T[size+10];     //为alist开辟一个更大的空间
		for(i=0;i<length;i++)
		{
			alist[i]=np[i];     //把np数组赋值给alist
	}
	return length-1;
 
}
}
template<class T>
bool Array<T>::RemoveAt(int index)//删除第几个数据
{
	
	if(index>=size||index<0)
		return 0;
	else
	{
		for(int i=index-1;i<length-1;i++)
		{
			alist[i]=alist[i+1];    //把数据往前移
		}
		alist[length-1]=NULL;
		length--;
		return 1;
	}
}
template<class T>//插入元素
void Array<T>::InsertItem(int index,T aData)//插入下标
{
	int i;
	
	for(i=length-1;i>=index;i--)
	{
		alist[i+1]=alist[i];     //从后往前，数据往后移一位
	}
	alist[index]=aData;
	length++;
	
}
template<class T>
void Array<T>::SelectSort()      //排序数组
{
	T t;
	for(int i=0;i<length-1;i++)
	{
		for(int j=0;j<length-1-i;j++)
		{
			if(alist[j]>alist[j+1])
			{
				t=alist[j];
				alist[j]=alist[j+1];
				alist[j+1]=t;
			}
		}
	}
	
}
template<class T>
void Array<T>::print()   //输出
{
	for(int i=0;i<length;i++)
	{
		cout<<alist[i]<<" ";
	}
}
int main()
{
	int a,i,lll,ind,inde,aData;
	cin>>a;
	int aa[10];
	for(i=0;i<a;i++)
	{
		cin>>aa[i];
	}
	Array<int> s(aa,a);
	cout<<"构造后的数组 "<<endl;
    
	s.print();
	cout<<"添加元素 ";
	cin>>lll;
	s.AddItem(lll);
    s.print();
	cout<<"删除元素 ";
	cin>>ind;
	
	if(s.RemoveAt(ind)==1)
		cout<<"删除成功 "<<endl;
	else if(s.RemoveAt(ind)==0)
		cout<<"删除失败 "<<endl;
	cout<<"删除下标元素后的数组 "<<endl;
	s.print();
	cout<<"添加下标和元素后的数组 "<<endl;
	cin>>inde>>aData;
	s.InsertItem(inde,aData);
	s.print();
	cout<<"排序后的数组 "<<endl;
	s.SelectSort();
	s.print();
	
	system("pause");
 
	return 0;
}
 
 
 
 
 
 
 
 